package com.aust.staticProxy.test1;

/**
 * 静态代理是指：在代码中事先写好一个代理类，它和目标对象实现同一个接口，然后由代理类去调用目标对象的方法，并在调用前后加入增强逻辑。
 * 接口（共同标准）
 * ↑        ↑
 * 目标对象     代理对象（持有目标对象引用）
 * ↑        ↑
 * 调用方调用代理对象 → 代理对象 → 调用目标对象
 */

/**
 * 静态代理是“提前写好代理类”，动态代理是“运行时动态生成代理类”
 * 静态代理写死了结构，动态代理用反射灵活处理方法调用。
 * <p>
 * 静态代理是代码层的设计模式，动态代理是反射机制的高级封装。
 * 静态代理适合手动控制、逻辑简单的项目；动态代理适合通用增强、高扩展性的框架应用。
 */
public class Test {
    public static void main(String[] args) {
        UserService realService = new UserServiceImpl();
        UserService proxy = new UserServiceProxy(realService);

        proxy.login("唐若洁");
        proxy.logout();
    }
}
